import {BasicColumn} from '/@/components/Table';
import {FormSchema} from '/@/components/Table';
import {JVxeTypes,JVxeColumn} from '/@/components/jeecg/JVxeTable/types'
import {h} from "vue";
import {Tag} from "ant-design-vue";

// 1. 定义响应式变量（Ref<string>类型）
// export const dwOrder = ref("sys_category,name,id");
//
// // 2. 计算属性明确返回string类型
// export const dwOrderComputed = computed<string>(() => {
//   return dwOrder.value; // 确保返回的是string值
// });
//列表数据
    export const columns: BasicColumn[] = [

      {
        title: '下单日期',
        align: "center",
        sorter: true,
        dataIndex: 'orderTime',
        customRender: ({text}) => {
          text = !text ? "" : (text.length > 10 ? text.substr(0, 10) : text);
          return text;
        },
        width: 120,
      },
      {
        title: '订单号',
        align: "center",
        sorter: true,
        dataIndex: 'orderNum',
        width: 150,
        customRender: function (text) {//
          return h(Tag, {
            color: (text.record["status"] == '3' ? '#417123' : (text.record["status"] == '1' ? '#b5172c' : '#d78647')),
            // color:  (text.record["status"] == '3' ? '#417123' : '#d78647') ,
          }, text.record["orderNum"])
        },
      },

      {
        title: '客户名称',
        align: "center",
        dataIndex: 'customer',
        width: 150,

      },

      {
        title: '销售经理',
        align: "center",
        dataIndex: 'saleName_dictText',
        width: 80,
      },

      {
        title: '销售类别',
        align: "center",
        dataIndex: 'saleType_dictText',
        width: 80,
      },

      {
        title: '设备型号',
        align: "center",
        dataIndex: 'printModel_dictText',
        width: 150,
      },
      {
        title: '是否下发',
        align: "center",
        dataIndex: 'issue_dictText',
        width: 80,
      },

      {
        title: '状态',
        align: "center",
        dataIndex: 'status_dictText',
        width: 80,
      },


      {
        title: '数量',
        align: "center",
        dataIndex: 'reserve5',
        width: 60,
      },

      {
        title: '发货时间',
        align: "center",
        sorter: true,
        dataIndex: 'shipmentsTime',
        customRender: ({text}) => {
          text = !text ? "" : (text.length > 10 ? text.substr(0, 10) : text);
          return text;
        },
        width: 120,
      },
      {
        title: '备注',
        align: "center",
        dataIndex: 'remark'
      },
    ];
//查询数据
    export const searchFormSchema: FormSchema[] = [
      {
        label: '订单状态',
        field: 'status',
        component: 'Select',
        componentProps: {
          options: [
            {label: '全部', value: '0'},
            {label: '待生产', value: '1'},
            {label: '生产中', value: '2'},
            {label: '已完成', value: '3'},
          ],
          defaultValue: '2',
        },
        colProps: {span: 4},
      },

      {
        label: "订单号",
        field: "orderNum",
        component: 'Input',
        colProps: {span: 4},
      },

      {
        label: "设备型号",
        field: 'printModel',
        component: 'JCategorySelect',
        componentProps: {
          pcode: 'A01',
        },
        colProps: {span: 4},
      },
      {
        label: '销售人员',
        field: 'saleName',
        component: 'UserSelect',
        componentProps: {
          rowKey: 'username',
          labelKey: 'realname',
          maxSelectCount: 10,
        },
        colProps: {span: 4},
      },
      {
        label: "发货时间",
        field: "shipmentsTime",
        component: 'RangePicker',
        componentProps: {
          valueType: 'Date',
        },
        colProps: {span: 4},
      },

    ];
//表单数据
    export const formSchema: FormSchema[] = [
      {
        label: '下单时间',
        field: 'orderTime',
        component: 'DatePicker',
        componentProps: {
          valueFormat: 'YYYY-MM-DD',
          defaultValue: new Date().toISOString().split('T')[0]
        },
        colProps: {span: 11},

      },

      {
        label: '客户名称',
        field: 'customer',
        component: 'Input',
        colProps: { span: 12 },
        // dynamicDisabled 逻辑优化：结合「新增/编辑状态」+「客户名称值」判断
        dynamicDisabled: ({ model }) => {
          // 1. 区分新增/编辑状态：通常用主键id判断（新增时id为空，编辑时id有值）
          const isEdit = !!(model.id && model.id !== '' && model.id !== null && model.id !== undefined);
          // 2. 核心规则：
          // - 新增未提交（isEdit=false）：始终允许输入（不禁用）
          // - 编辑状态（isEdit=true）：客户名称有值则禁用，无值则允许输入
          if (!isEdit) {
            return false; // 新增未提交：不禁用
          } else {
            // 编辑时：客户名称非空/非null/非undefined → 禁用；否则不禁用
            return !(model.customer === '' || model.customer === null || model.customer === undefined);
          }
        },
      },
      {
        label: '订单号',
        field: 'orderNum',
        component: 'Input',
        dynamicDisabled: ({ model }) => {
          // 1. 区分新增/编辑状态（通过主键id判断：新增时id为空，编辑时id存在）
          const isEdit = !!(model.id && model.id !== '' && model.id !== null && model.id !== undefined);
          // 2. 获取默认订单号
          const date = new Date();
          const defaultOrderNum = `SD-${date.getFullYear()}-${String(date.getMonth() + 1).padStart(2, '0')}-${String(date.getDate()).padStart(2, '0')}-000`;

          // 3. 核心逻辑（重点使用isEdit区分状态）：
          if (!isEdit) {
            // 新增状态：永远不禁用（允许任意输入和修改）
            return false;
          } else {
            // 编辑状态：非空且非默认值时禁用（保护已修改的订单号）
            return model.orderNum !== '' && model.orderNum !== defaultOrderNum;
          }

          // 注意：如果新增和编辑的禁用规则完全一致，可简化为一行
          // return model.orderNum !== '' && model.orderNum !== defaultOrderNum;
        },
        defaultValue: (() => {
          const date = new Date();
          return `SD-${date.getFullYear()}-${String(date.getMonth() + 1).padStart(2, '0')}-${String(date.getDate()).padStart(2, '0')}-000`;
        })(),
        colProps: { span: 11 },
      },

      {
        label: '订单下发',
        field: 'issue',
        component: 'JDictSelectTag',
        componentProps: {
          dictCode: 'dw_pro_issue',
        },
        required: true,
        colProps: {span: 10},
        defaultValue: '1',
      },


      {
        label: '产品类型',
        field: 'proType',
        component: 'JDictSelectTag',
        componentProps: {
          dictCode: 'dw_pro_type',
        },
        required: true,
        colProps: {span: 7},
        defaultValue: '1',
      },
      {
        label: '销售经理',
        field: 'saleName',
        component: 'UserSelect',
        componentProps: {
          rowKey: 'username',
          labelKey: 'realname',
          maxSelectCount: 10,
        },
        colProps: {span: 7},
      },

      {
        label: '销售类别',
        field: 'saleType',
        component: 'JDictSelectTag',
        componentProps: {
          dictCode: 'dw_sale_type',
        },
        colProps: {span: 7},
        required: true,
        defaultValue: '1',
      },

      // {
      //   label: '设备识别码',
      //   field: 'mcuNum',
      //   component: 'Input',
      //   show:({model})=>{
      //     return model.proType==='1';
      //   },
      // },
      {
        label: '备注',
        field: 'remark',
        component: 'InputTextArea',
      },


      {
        label: '调货单号',
        field: 'oldOrderNum',
        component: 'Input',
        show: ({model}) => {
          return model.proType == 9;
        },
        colProps: {span: 10},
      },
      {
        field: 'printModel',
        component: 'JCategorySelect',
        label: '设备型号',
        componentProps: {
          pcode: 'A01',
          multiple: true
        },
        dynamicDisabled: true,
        colProps: {span: 14},
      },

      {
        label: '变更信息',
        field: 'log',
        component: 'InputTextArea',
        // show: ({model}) => {
        //   return model.oldOrderNum !== null;
        // },
        dynamicDisabled: true,
      },


      // TODO 主键隐藏字段，目前写死为ID
      {
        label: '',
        field: 'id',
        component: 'Input',
        show: false
      },
    ];
//子表单数据
    export var dwOrderProductColumns: JVxeColumn[] = [
      {
        title: '机型',
        key: 'proModel',
        type: JVxeTypes.selectDictSearch,
        width: 200,
        async: true,
        // 字典表配置信息：数据库表名,显示字段名,存储字段名
        dict: 'sys_category,name,id',
        tipsContent: '请输入',
        validateRules: [
          {
            required: true, // 必填
            message: '请输入', // 显示的文本
          },]
      },

      {
        title: '喷头',
        key: 'proHeat',
        type: JVxeTypes.select, // 下拉选择类型
        width: "120px",
        placeholder: `请选择`,
        // 核心：配置数据字典（与 JDictSelectTag 的 dictCode 用法一致）
        dictCode: 'dw_print_head', // 数据字典编码（对应后端字典表的 dict_code 字段）
        // 可选：是否支持清空选择（默认 false）
        clearable: true,
        // 可选：下拉框样式调整
        selectProps: {
          style: {width: '100%'}
        },
        defaultValue: '1',
        validateRules: [
          {
            required: true, // 必填
            message: '请选择${title}', // 显示的文本
          },]

      },
      {
        title: '喷头类型',
        key: 'proHeatNum',
        type: JVxeTypes.select, // 下拉选择类型
        width: "80px",
        placeholder: `请选择`,
        // 核心：配置数据字典（与 JDictSelectTag 的 dictCode 用法一致）
        dictCode: 'dw_print_head_num', // 数据字典编码（对应后端字典表的 dict_code 字段）
        // 可选：是否支持清空选择（默认 false）
        clearable: true,
        // 可选：下拉框样式调整
        selectProps: {
          style: {width: '100%'}
        },
        defaultValue: '1',
        validateRules: [
          {
            required: true, // 必填
            message: '请选择${title}', // 显示的文本
          },]

      },
      {
        title: '恒温',
        key: 'isHeat',
        type: JVxeTypes.select, // 下拉选择类型
        width: "80px",
        placeholder: `请选择`,
        // 核心：配置数据字典（与 JDictSelectTag 的 dictCode 用法一致）
        dictCode: 'yn', // 数据字典编码（对应后端字典表的 dict_code 字段）
        // 可选：是否支持清空选择（默认 false）
        clearable: true,
        // 可选：下拉框样式调整
        selectProps: {
          style: {width: '100%'}
        },
        defaultValue: '0',
        validateRules: [
          {
            required: true, // 必填
            message: '请选择${title}', // 显示的文本
          },]

      },
      {
        title: '电压',
        key: 'proVol',
        type: JVxeTypes.select, // 下拉选择类型
        width: "100px",
        placeholder: `请选择`,
        // 核心：配置数据字典（与 JDictSelectTag 的 dictCode 用法一致）
        dictCode: 'dw_voltage', // 数据字典编码（对应后端字典表的 dict_code 字段）
        // 可选：是否支持清空选择（默认 false）
        clearable: true,
        // 可选：下拉框样式调整
        selectProps: {
          style: {width: '100%'}
        },
        defaultValue: '2',
        validateRules: [
          {
            required: true, // 必填
            message: '请选择${title}', // 显示的文本
          },]

      },

      {
        title: '数量',
        key: 'num',
        type: JVxeTypes.inputNumber,
        width: "80px",
        placeholder: '请输入${title}',
        defaultValue: '1',
      },
      {
        title: '关联数量',
        key: 'bhNum',
        type: JVxeTypes.inputNumber,
        width: "80px",

      },
      {
        title: '状态',
        key: 'status',
        type: JVxeTypes.inputNumber,
        width: "80px",

      },
    ]
    // 如果子表单没有自动响应dict变化，可以添加一个watch监听
    // watch(dwOrder, (newVal) => {
    //   // 找到对应的列并更新dict
    //   const proModelColumn = dwOrderProductColumns.find(col => col.key === 'proModel');
    //   if (proModelColumn) {
    //     proModelColumn.dict = newVal;
    //     // 某些情况下可能需要手动触发表格刷新
    //     // 可以通过emit事件或调用表格的refresh方法
    //   }
    // });
// 高级查询数据
    export const superQuerySchema = {
      customer: {title: '客户名称', order: 0, view: 'text', type: 'string',},
      mcuNum: {title: '设备识别码', order: 1, view: 'text', type: 'string',},
      printModel: {title: '设备型号', order: 2, view: 'text', type: 'string',},
      saleName: {title: '销售人员', order: 3, view: 'text', type: 'string',},
      saleType: {title: '销售类别', order: 4, view: 'text', type: 'string',},
      shipmentsTime: {title: '发货时间', order: 5, view: 'date', type: 'string',},
      saleNum: {title: '销售单编号', order: 6, view: 'text', type: 'string',},
      orderNum: {title: '订单号', order: 7, view: 'text', type: 'string',},
      reserve1: {title: '预留', order: 8, view: 'text', type: 'string',},
      reserve2: {title: '预留2', order: 9, view: 'text', type: 'string',},
      reserve3: {title: '预留3', order: 10, view: 'text', type: 'string',},
      reserve4: {title: '预留4', order: 11, view: 'text', type: 'string',},
      reserve5: {title: '预留5', order: 12, view: 'text', type: 'string',},
      dwOrderProduct: {
        title: '设备型号',
        view: 'table',
        fields: {
          proModel: {title: '机型', order: 0, view: 'text', type: 'string',},
          isHeat: {title: '恒温', order: 1, view: 'text', type: 'string',},
          num: {title: '数量', order: 2, view: 'number', type: 'number',},
          descc: {title: '描述', order: 3, view: 'text', type: 'string',},
          orderFkId: {title: '订单外键ID', order: 4, view: 'text', type: 'string',},
          proVol: {title: '产品电压', order: 5, view: 'text', type: 'string',},
          proHeat: {title: '喷头', order: 6, view: 'text', type: 'string',},
          proHeatNum: {title: '喷头数量', order: 7, view: 'number', type: 'number',},
        }
      },
    };

    /**
     * 流程表单调用这个方法获取formSchema
     * @param param
     */
    export function getBpmFormSchema(_formData): FormSchema[] {
      // 默认和原始表单保持一致 如果流程中配置了权限数据，这里需要单独处理formSchema
      return formSchema;
    }

// 监听proType变化，动态更新子表dict配置
//     watch(
//
//       () => formSchema.values?.proType,
//       (newProType) => {
//         console.log("1111111111->",newProType);
//         // 查找proModel列
//         const proModelColumn: JVxeColumn | undefined = dwOrderProductColumns.find(
//           (col) => col.key === 'proModel'
//         );
//
//         if (proModelColumn) {
//           // 根据proType设置不同的dict值
//           // proModelColumn.dict = newProType === '1' ? 'ed' : 'od';
//           if (newProType == 2) {
//             proModelColumn.dict = "sys_user,username,id";
//             // dwOrderProduct1 = "sys_user,username,id";
//           } else if (newProType == 9) {
//             proModelColumn.dict = "sys_dict_item,item_text,id";
//           } else {
//             proModelColumn.dict = "sys_category,name,id";
//           }
//           const tableColumns = ref<JVxeColumn[]>(JSON.parse(JSON.stringify(dwOrderProductColumns)));
//           // tableColumns.value = [...tableColumns.value]
//           // 通知表格刷新列配置（Jeecg 3.8的JVxeTable需要手动触发刷新）
//           tableColumns.value = [...tableColumns.value];
//         }
//       },
//       {immediate: true} // 初始化时立即执行
//     );
//   }
// })
